const fs = require('fs').promises;
const path = require('path');
const mysql = require('mysql2/promise');
require('dotenv').config();

// 数据库连接配置（不指定数据库，用于创建数据库）
const dbConfig = {
  host: process.env.DB_HOST || 'localhost',
  port: process.env.DB_PORT || 3306,
  user: process.env.DB_USER || 'root',
  password: process.env.DB_PASSWORD || '',
  charset: 'utf8mb4',
  multipleStatements: true
};

// 初始化数据库
async function initDatabase() {
  let connection;
  
  try {
    // 连接到MySQL服务器
    connection = await mysql.createConnection(dbConfig);
    console.log('🔗 已连接到MySQL服务器');
    
    // 读取并执行SQL文件
    const schemaPath = path.join(__dirname, '../database/schema.sql');
    const schemaSql = await fs.readFile(schemaPath, 'utf8');
    
    console.log('📊 开始创建数据库结构...');
    await connection.query(schemaSql);
    console.log('✅ 数据库结构创建成功！');
    
    // 插入初始数据
    await insertInitialData(connection);
    
    console.log('🎉 数据库初始化完成！');
    console.log('📋 你现在可以使用以下数据库:');
    console.log(`   数据库名: ${process.env.DB_NAME || 'pet_rescue'}`);
    console.log(`   主机: ${process.env.DB_HOST || 'localhost'}`);
    console.log(`   端口: ${process.env.DB_PORT || 3306}`);
    console.log(`   用户: ${process.env.DB_USER || 'root'}`);
    
  } catch (error) {
    console.error('❌ 数据库初始化失败:', error.message);
    process.exit(1);
  } finally {
    if (connection) {
      await connection.end();
    }
  }
}

// 插入初始数据
async function insertInitialData(connection) {
  console.log('📥 开始插入初始数据...');
  
  // 切换到目标数据库
  await connection.query(`USE ${process.env.DB_NAME || 'pet_rescue'}`);
  
  // 插入领养案例数据
  const adoptionCases = [
    [
      'coco的领养案例', 
      '/images/20230417/1681740318301726.jpg', 
      '已成功领养',
      '李小姐',
      '2岁',
      '雌性',
      '金毛寻回犬',
      '健康良好，已绝育',
      '性格温顺，喜欢和小朋友玩耍',
      'Coco是一只非常可爱的金毛犬，曾经是一只流浪狗，在我们的救助中心生活了6个月。她性格温顺，特别喜欢和小朋友玩耍，是一个很好的家庭伴侣。',
      '2023-01-15',
      '2023-04-17',
      '[\"/images/20230417/1681740318301726.jpg\", \"/images/20220716/1657971345150650.jpg\"]'
    ],
    [
      '小雪',
      '/images/20230423/1682256503357127.jpg',
      '已成功领养',
      '王先生',
      '1.5岁',
      '雌性',
      '中华田园犬',
      '健康良好',
      '活泼好动，聪明伶俐',
      '小雪是一只非常聪明的小狗，学习能力很强，能很快适应新环境。',
      '2023-02-10',
      '2023-04-20',
      '[\"/images/20230423/1682256503357127.jpg\"]'
    ],
    [
      '大黄',
      '/images/20230423/1682256531398881.jpg',
      '等待领养',
      null,
      '3岁',
      '雄性',
      '中华田园犬',
      '健康良好，已绝育',
      '忠诚护主，适合看家',
      '大黄是一只非常忠诚的狗狗，对主人忠心耿耿，是很好的看家犬。',
      '2023-03-05',
      null,
      '[\"/images/20230423/1682256531398881.jpg\"]'
    ]
  ];
  
  for (const caseData of adoptionCases) {
    await connection.query(`
      INSERT INTO adoption_cases 
      (name, image, status, adopter, age, gender, breed, health, \`character\`, description, rescue_date, adoption_date, photos)
      VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
    `, caseData);
  }
  
  // 插入知识文章数据
  const articles = [
    [
      '猫为什么会炸毛',
      '2025-09-13',
      'knowledge',
      '宠物专家',
      '了解猫咪炸毛的原因和应对方法',
      '猫咪炸毛是一种常见的行为，通常表示它们感到恐惧、愤怒或兴奋。当猫咪感到威胁时，它们会让毛发竖起来，使自己看起来更大，以威慑潜在的威胁...',
      '[\"猫咪行为\", \"宠物护理\", \"动物心理\"]',
      1250,
      89
    ],
    [
      '如何训练小狗上厕所',
      '2025-09-13',
      'knowledge',
      '训练师小李',
      '系统性训练幼犬定点排便的方法',
      '训练小狗上厕所需要耐心和一致性。以下是详细的训练步骤：1. 建立规律的作息时间...',
      '[\"狗狗训练\", \"幼犬教育\", \"生活习惯\"]',
      2100,
      156
    ],
    [
      '抵制大规模捕杀流浪狗',
      '2025-09-13',
      'news',
      '动物保护协会',
      '呼吁理性对待流浪动物问题，寻找人道解决方案',
      '近期某地区出现大规模捕杀流浪狗的事件，引起了社会广泛关注。动物保护组织呼吁采用更加人道的方式解决流浪动物问题...',
      '[\"动物保护\", \"流浪动物\", \"社会问题\"]',
      2500,
      189
    ]
  ];
  
  for (const article of articles) {
    await connection.query(`
      INSERT INTO knowledge_articles 
      (title, date, category, author, summary, content, tags, read_count, like_count)
      VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
    `, article);
  }
  
  // 插入救助案例数据
  const rescueCases = [
    ['大宝', 'cat', '/images/20230423/1682256877856387.jpg', '救助中', '2岁', '雄性', '亲人温顺，喜欢被抚摸', '2025-08-15', '市中心小区', '大宝是在小区垃圾桶旁发现的，当时身体虚弱，经过精心照料现在已经恢复健康。'],
    ['琪琪', 'dog', '/images/20230423/1682256826549167.jpg', '救助中', '3岁', '雌性', '活泼友好，喜欢和人玩耍', '2025-08-10', '公园附近', '琪琪是一只非常友好的狗狗，被发现时正在公园里寻找食物。'],
    ['路奇', 'other', '/images/20230423/1682256728449555.jpg', '救助中', '1岁', '雄性', '温顺可爱', '2025-08-18', '学校附近', '路奇是一只被遗弃的宠物兔，现在住在我们的小动物区域。']
  ];
  
  for (const rescue of rescueCases) {
    await connection.query(`
      INSERT INTO rescue_cases 
      (name, type, image, status, age, gender, \`character\`, rescue_date, rescue_location, description)
      VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
    `, rescue);
  }
  
  console.log('✅ 初始数据插入完成！');
  console.log(`📊 数据统计:`);
  console.log(`   - 领养案例: ${adoptionCases.length} 条`);
  console.log(`   - 知识文章: ${articles.length} 条`);
  console.log(`   - 救助案例: ${rescueCases.length} 条`);
}

// 运行初始化
if (require.main === module) {
  initDatabase().catch(console.error);
}

module.exports = { initDatabase };
